#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <string.h>
#include "struct.h"
#include "msg_queue.h"

static int msgid_ctos;
static int msgid_stoc;

int main()
{
	while(1)
	{
		msgid_ctos = get_ctos_msg();
		msgid_stoc = get_stoc_msg();
		Msg msg_ctos = {};
		Msg msg_stoc = {};
		User user = {};
		if(0 > msgrcv(msgid_ctos,&msg_ctos,sizeof(Msg),TYPE_DESTORY,0))
		{
			perror("msgrcv");
			return -1;
		}
		printf("account:%d\n",msg_ctos.user.account);
		char path[50] = "user/";
		sprintf(path,"%s%d",path,msg_ctos.user.account);
		strcat(path,".txt");
		puts(path);
		msg_stoc.type = msg_ctos.pid;
		if(0 > access(path,F_OK))
		{
			sprintf(msg_stoc.result,"账户%d不存在",msg_ctos.user.account);
			return -1;
		}
		else
		{
			int fd = open(path,O_RDONLY);
			if(0 > fd)
			{
				perror("open");
				return -1;
			}
		
			if(0 > read(fd,&user,sizeof(User)))
			{
				perror("read");
				return -1;
			}
			if(0 == strcmp(user.pwd,msg_ctos.user.pwd))
			{
				if(0 > unlink(path))
				{
					perror("unlink");
				}
				int fd2 = open("user/destroy.txt",O_WRONLY|O_CREAT|O_APPEND,0644);
				if(0 > fd2)
				{
					perror("open");
					return -1;
				}
				write(fd2,&user.account,sizeof(user.account));
				close(fd2);
				sprintf(msg_stoc.result,"销户成功");
			}
			else
			{
				sprintf(msg_stoc.result,"账号密码错误");
			}
			close(fd);
			msgsnd(msgid_stoc,&msg_stoc,sizeof(Msg)-sizeof(msg_stoc.type),0);
		}
	}
}
